//package cn.bonoon.controllers.role;
//
//import java.util.ArrayList;
//import java.util.Collection;
//import java.util.List;
//
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Controller;
//import org.springframework.ui.Model;
//import org.springframework.web.bind.annotation.RequestMapping;
//
//import cn.bonoon.core.plugins.RoleService;
//import cn.bonoon.entities.plugins.RoleEntity;
//import cn.bonoon.kernel.menus.ActionInfo;
//import cn.bonoon.kernel.menus.ChannelInfo;
//import cn.bonoon.kernel.menus.ItemInfo;
//import cn.bonoon.kernel.menus.MenuInfo;
//import cn.bonoon.kernel.menus.ModuleInfo;
//import cn.bonoon.kernel.menus.ModuleManager;
//import cn.bonoon.kernel.util.StringHelper;
//import cn.bonoon.kernel.web.controllers.AbstractController;
//
//@Controller
//@RequestMapping("privileges")
//public class PrivilegesController extends AbstractController {
//	private RoleService service;
//	private ModuleManager moduleManager;
//	
//	@Autowired
//	protected PrivilegesController(RoleService service, ModuleManager moduleManager) {
//		this.service = service;
//		this.moduleManager = moduleManager;
//	}
//
//	@RequestMapping("get.b")
//	public String privileges(Model model, Long r, String m) {
//		RoleEntity entity = null;
//		String moduleKey = null; // 子系统
//		Long roleId = -1L;
//		List<String> selectedIds = new ArrayList<String>();
//		if (r != null && r > 0) {
//			entity = service.get(r);
//			roleId = entity.getId();
//			moduleKey = StringHelper.isEmpty(m) ? entity.getModuleKey() : m;
//			List<String> menuIds = service.getPrivilegeMeunId(entity.getId());
//			if (null != menuIds) {					
//				selectedIds = menuIds;
//			}
//		} else {
//			moduleKey = m;
//		}
//		
//		if (StringHelper.isEmpty(moduleKey)) {
//			Collection<ModuleInfo> subs = moduleManager.modules(); // 获取所有子系统
//			for (ModuleInfo _m : subs) {				
//				moduleKey = _m.getId();
//				break;
//			}
//		}
//		
//		model.addAttribute("privileges", this.privilegesHtml(moduleKey, selectedIds, roleId));
//		return "u-sys-role-privileges";
//	}
//
//	private String privilegesHtml(String moduleId, List<String> selectedIds, Long roleId) {
//		StringBuilder html = new StringBuilder();
//		html.append("<div style='width:100%;height:340px;overflow-y:scroll;margin:0;padding:0;'><table width='90%' class='editor'>");
//		html.append("<thead><tr><th style='text-align:center;'>菜单</th></tr></thead><tbody id='role-privilege-editor'");
//		ModuleInfo mi = moduleManager.module(moduleId); // 获取子系统
//		html.append("<tr><td>")
//				.append(mi.getName())
//				.append("&nbsp;<span style='color:#FF0000;'>（提示：“全选”是选中此菜单和它的所有子级菜单；“取消”是取消选中此菜单和它的所有子级菜单。）</span></td></tr>");
//		int i = 1;
//		String chkClss;
//		for (ChannelInfo ci : mi.getChannels()) { // 循环该子系统下的所有频度
//			chkClss = "C" + i;
//			html.append("<tr><td style='padding-left:30px;'>").append(ci.getName());
//			if (null != ci.getMenus() && !ci.getMenus().isEmpty()) {
//				html.append("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
//				html.append("<a href='javascript:void(0);' name='privileges_allsel' class='").append(chkClss).append("'>全选</a>");
//				html.append("<span style='color:#bfbfbf;'>&nbsp;|&nbsp;</span>");
//				html.append("<a href='javascript:void(0);' name='privileges_cancel' class='").append(chkClss).append("'>取消</a>");
//			}
//			html.append("</td></tr>");
//			visitMenus(ci, html, selectedIds, 2, chkClss, roleId); // 递归该频度下所有菜单
//			i++;
//		}
//		html.append("</tbody></table></div>");
//		return html.toString();
//	}
//
//	private void visitMenus(ItemInfo item, StringBuilder html, List<String> selectedIds, final int deep, final String checkboxClass, Long roleId) {
//		if (null != item.getMenus() && !item.getMenus().isEmpty()) {
//			int left = deep * 30, i = 1;
//			for (MenuInfo mi : item.getMenus()) {
//				String chkClss = checkboxClass + "C" + i;
//				String mi_id = mi.getId();
//				html.append("<tr><td style='padding-left:").append(left);
//				html.append("px;'><input type='checkbox' name='privileges' class='").append(chkClss).append("' value='").append(mi_id);
//				html.append(selectedIds.contains(mi_id) ? "' checked='checked'/>" : "'/>").append(mi.getName());
//				
//				Long actions = service.getActions(mi_id, roleId);
//				if (null == actions) {
//					actions = 0L;
//				}
//				ActionInfo[] actions_array = mi.getActions();
//				if (null != actions_array && actions_array.length > 0) {
//					html.append("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
//					for (ActionInfo action: actions_array) {
//						int key = action.getKey();
//						String key_actions = mi_id + "_actions";
//						String name = action.getName();
//						html.append("<input type='checkbox' name='").append(key_actions).append("' class='").append(chkClss);
//						html.append("' value='").append(key).append((actions & key) == key ? "' checked='checked'/>" : "'/>").append(name);
//					}
//				}
//				
//				if (null != mi.getMenus() && !mi.getMenus().isEmpty()) {
//					html.append("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
//					html.append("<a href='javascript:void(0);' name='privileges_allsel' class='").append(chkClss).append("'>全选</a>");
//					html.append("<span style='color:#bfbfbf;'>&nbsp;|&nbsp;</span>");
//					html.append("<a href='javascript:void(0);' name='privileges_cancel' class='").append(chkClss).append("'>取消</a>");
//				}
//				html.append("</td></tr>");
//				visitMenus(mi, html, selectedIds, deep + 1, chkClss, roleId);
//				i++;
//			}
//		}
//	}
//
//}
